package udp;

/*
 * Classe que representa o servidor de arquivos 
 */

import java.io.*;
import java.net.*;

public class ServidorUDP {
    
    static int PORTA = 5000;
    static String caminho = System.getProperty("user.dir") + "\\src\\files";
    
    public static void main(String args[]) throws Exception {
        
        System.out.println("Servidor UDP executando:");
        //Socket UDP
        DatagramSocket serverSocket = new DatagramSocket(PORTA);
        DatagramPacket pacoteEnvio, pacoteRecebido;
        
        byte[] receiveData = new byte[1025];
        byte[] sendData;
        
        try {
            while (true) {
                pacoteRecebido = 
                            new DatagramPacket(
                                receiveData,receiveData.length);
                
                serverSocket.receive(pacoteRecebido);
                
                InetAddress IPCliente = 
                        pacoteRecebido.getAddress();
                int port = pacoteRecebido.getPort();
                
                
                byte[] dadosPacoteRecebido = pacoteRecebido.getData();
                String nomeArquivo = new String(dadosPacoteRecebido);
                System.out.println("nome do arquivo: "+nomeArquivo);
                
                //busca do arquivo
                File arquivo = 
                        new File(caminho + "\\"+ nomeArquivo.trim());
                
                //verificação do arquivo
                if (arquivo.isFile()){
                    //Envia pro cliente
                    InputStream input = new FileInputStream(arquivo);
                    
                    sendData = new byte[1024];
                    input.read(sendData);
                    
                    
                    Datagrama datResposta = 
                            new Datagrama((byte) 0, sendData);
                    
                    pacoteEnvio = 
                            new DatagramPacket(datResposta.getPacote(), 
                                               datResposta.getPacote().length,
                                                IPCliente,port);
                    
                    serverSocket.send(pacoteEnvio);
                    System.out.println("Arquivo Enviado.");
                                        
                }else{
                    //Envia msg de erro
                    String resposta = "File Not Found";
                    sendData = resposta.getBytes();
                    
                    Datagrama datResposta = new Datagrama((byte) 1, sendData);
                    
                    
                    pacoteEnvio = 
                            new DatagramPacket(datResposta.getPacote(),
                                               datResposta.getPacote().length,
                                               IPCliente,port);
                    
                    serverSocket.send(pacoteEnvio);
                    System.out.println("Resposta enviada: "+ resposta);
                                        
                }
  
            }            
        }catch (Exception e){
            e.printStackTrace();
        }                
    }
}
